// 一般情况下命名 ajax或 request
import axios from "axios";
import qs from "qs";

// 创建axios的实例对象
const instance = axios.create({
    baseURL:'http://localhost:8000',
    timeout:50000
})
console.log(instance);
// 拦截器
// 请求拦截器      拦截整个配置
let reqInterceptors = instance.interceptors.request.use(config=>{
    console.log(config);
    return config;
})
let flag = true;
//当flag为true取消拦截器，为false不取消
if(flag){
    instance.interceptors.request.eject(reqInterceptors);
}

//transformRequest    拦截data
//transformResponse

// 响应拦截器
let resInterceptors = instance.interceptors.response.use(res=>{
    console.log(res);
    res = res.data;
    return res;
    // res = JSON.parse(res);
    // return JSON.parse(res.data)
})
if(flag){
    instance.interceptors.request.eject(resInterceptors);
}

//封装----------------------------------------------

// method: get post
// url:  url
// params: {}   对于get请求  query   ?key=value&key=value   
   //      对于post请求  from 序列化一下  key=value&key=value
// 请求头是不同  headerType
function request(method,url,params,headerType){
    let data = {};
    // get  请求头设置 路径处理
    // post  请求头设置   请求体数据进行处理 data

    //get请求
    if(method.toLowerCase() == "get"){
        //表单
        if(headerType == 'form'){
            instance.defaults.headers["Content-Type"] = "application/x-www-form-urlencoded;charset=utf-8";
        }
        if(params){
            // params 作为request函数的参数 设计它的值为{}  要不是get query 要不是post请求 请求体中的值
            // url  ? key=value&key=value  
            // 
            params = qs.stringify(params);
            url += "?" + params;
        }
    }
    //post请求
    if(method.toLowerCase() == 'post'){
        //表单
        if(headerType == 'form'){
            instance.defaults.headers["Content-Type"] = "application/x-www-form-urlencoded;charset=utf-8";
            data = qs.stringify(params);
        }else{
            instance.defaults.headers["Content-Type"] = "application/json;charset=utf-8";
            data = params;
        }
    }
    return new Promise((resolve,reject)=>{
        instance({
            method,
            url,
            data,
        }).then(res=>{
            console.log(res);
            resolve(res);
        }).catch(err=>{
            console.log(err);
            reject(err);
        })
    })
}

//--------------------------------------------------

// export default instance;
export default request;